# coding=utf-8
# @Author:zcx
# @Time:2024/9/12 8:35


"""
QListWidget是一个便利的类，它提供了一个类似于QListView所提供的列表视图，
但是具有用于添加和删除项的经典的基于项的接口。
QListWidget使用一个内部模型来管理列表中的每个qlistwidgetiitem。
包含一个列表部件（QListWidget）、一个输入框（QLineEdit）和三个按钮（QPushButton）。
用户可以输入文本，点击"Add Item"按钮将文本添加到列表，选择列表项并点击"Remove Selected Item"按钮将移除选中的项目，
点击"Clear All"按钮将清空整个列表。同时，点击列表项会触发一个信号，并在控制台输出相应的信息。

关键的 QListWidget 方法和属性包括：
    addItem(item): 将项目添加到列表。
    insertItem(index, item): 在指定位置插入项目。
    takeItem(index): 从列表中移除指定位置的项目。
    clear(): 移除所有项目。
    count(): 返回列表中的项目数。
    currentItem(): 返回当前选中的项目。
    setCurrentItem(item): 设置当前选中的项目。
    item(index): 返回指定位置的项目。
    itemAt(x, y): 返回给定坐标处的项目。
    selectedItems(): 返回当前选中的所有项目。
    setSelectionMode(mode): 设置选择模式。


"""


import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton,QMessageBox ,QListWidget,QLineEdit,QListWidgetItem

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setup_ui()

    def setup_ui(self):
        self.resize(800, 600)

        # 创建一个垂直布局
        vbox = QVBoxLayout(self)
        list_view = QListWidget()

        add_btn = QPushButton("增加")
        del_btn = QPushButton("删除")
        clear_btn = QPushButton("清空")
        input_text = QLineEdit("请输入")

        vbox.addWidget(list_view)
        vbox.addWidget(input_text)
        vbox.addWidget(add_btn)
        vbox.addWidget(del_btn)
        vbox.addWidget(clear_btn)

        # 把input输入框设置为self的属性
        self.input_text = input_text
        # 把list_widget设置为self的属性
        self.list_widget = list_view

        # 按钮设置槽函数
        add_btn.clicked.connect(self.add_text)
        del_btn.clicked.connect(self.del_text)
        clear_btn.clicked.connect(self.clear_all)

        # 1， 获取到选中的项
        # itemcliecked绑定槽函数获取到被点击的项
        self.list_widget.itemClicked.connect(self.item_clicked)

    def add_text(self):
        """点击添加按钮，把输入框内容显示到list_widget"""
        # 1.获取输入框中输入的内容
        text = self.input_text.text()
        if text == "请输入":
            QMessageBox.warning(self, "warning", "内容为空")
        else:
            # 2.把获取的内容添加到list_widget
            # 创建一个 QListWidgetItem 并设置文本
            item = QListWidgetItem(text)
            # 把对象添加到list——widgets上
            # additem接收一个QListWidgetItem的实例对象
            self.list_widget.addItem(item)
            # 清空输入框
            self.input_text.clear()
            self.input_text.setText("请输入")


    def del_text(self):
        # 1.获取当前选中的项目
        select_item = self.list_widget.currentItem()
        # 获取当前选中的行的索引
        print(self.list_widget.currentRow())
        # 通过选择的选项查到当前的索引，row()要接受一个选中的项的参数
        print(self.list_widget.row(select_item))
        # 2.点击删除的按钮，进行删除
        if select_item:
            # 删除用的是takeitem(被删除项的索引)
            self.list_widget.takeItem(self.list_widget.currentRow())

    def clear_all(self):
        """清空list_widget"""
        # 移除所有项目
        self.list_widget.clear()

    def item_clicked(self, item):
        """获取当前选中的项"""
        # 处理项目点击事件
        print(f"当前选择的: {item.text()}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
